import logging
import re

# 百家姓，可用于匹配人名
XING = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑" \
       "薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈祝董梁杜阮蓝闵席季" \
       "麻强贾路娄危江童颜郭梅盛林刁锺徐邱骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经房裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀" \
       "羊於惠甄麴家封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭历戎祖武符刘景詹束龙叶幸司韶郜黎溥印宿白怀蒲" \
       "邰从鄂索咸籍卓蔺屠蒙池乔阳郁胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍却桑桂濮牛寿通边扈燕冀浦尚农温别庄晏柴瞿充慕连茹习宦艾鱼容向古易慎" \
       "戈廖庾终暨居衡步都耿满弘匡国文寇广禄阙东欧沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠丰巢关蒯相荆红游竺权司马上官欧阳夏" \
       "侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于单于太叔申屠公孙仲孙轩辕令狐钟离宇文长孙慕容司徒司空召有舜岳黄辰寸贰皇侨彤竭端赫实甫" \
       "集象翠狂辟典良函芒苦其京夕乌孙完颜富察费莫蹇称诺来多繁戊朴回毓鉏税荤靖绪愈硕牢买但巧枚撒泰秘亥绍以壬森斋释奕姒朋求羽用占真穰翦闾漆贵" \
       "代贯旁崇栋告休褒谏锐皋闳歧禾示委钊频嬴呼大威昂律冒保系抄定化莱校么抗祢綦悟宏功庚务敏捷拱兆丑丙畅苟随卯俟友答乙允甲留尾佼玄乘裔延" \
       "植环矫赛昔侍度旷遇偶前由咎塞敛受泷袭衅叔圣御夫仆镇藩邸府掌首员焉戏可智尔凭悉进笃厚仁肇合仍九衷哀刑俎仵圭夷徭蛮汗孛乾帖罕洛淦洋邶郸" \
       "郯邗邛剑虢隋蒿茆菅苌树桐锁钟机盘铎斛玉线针箕庹绳磨蒉瓮弭刀疏牵浑恽势世仝同蚁止戢睢冼种涂肖己泣潜卷脱谬蹉赧浮顿说次错念夙斯完丹表聊源" \
       "吾寻展出户闭才书学愚本性雪霜烟寒少字桥板斐独千诗嘉扬善揭祈析赤紫青柔刚奇拜佛陀弥阿素长僧隐仙隽宇祭酒淡塔琦闪始星南天接波碧速禚腾潮" \
       "镜似澄潭謇纵渠奈风春濯沐茂英兰檀藤枝检生折登驹骑貊虎肥鹿雀野禽飞节宜鲜粟栗豆帛官布衣藏宝钞银盈庆喜普营巨望希道载声漫犁力贸勤革改" \
       "兴亓睦修信闽北守坚勇汉练尉士旅五令将旗军行奉敬恭仪母堂丘义礼慈孝理伦卿问永辉位让尧依犹介承市所苑杞剧零谌招续达忻六鄞战迟候宛励粘萨邝" \
       "覃辜初楼城区局台原考妫纳泉老清德卑过麦曲竹百福言五佟爱年笪谯哈墨连南宫赏伯佴佘牟商西东左丘梁丘琴后况亢缑帅微生羊舌海归呼延南门东" \
       "郭百里钦鄢汝法闫楚晋谷梁宰父夹谷拓跋壤驷乐正漆雕公西巫马端木颛孙子车督仉司寇亓官三小鲜于锺离盖逯库郏逢阴薄厉稽闾丘公良段干开光操瑞眭泥" \
       "运摩伟铁迮赖戌付佀遆琚裴杲查和茶押雒"


class ReMixIn(object):
    @staticmethod
    def reg_one(pattern_list, string_content, tolist=False, reverse=False, flags=0, detail=False, filter=False):
        """
        输入正则表达式列表，从列表中依次取出表达式对text进行匹配。一旦有结果立马返回

        :param pattern_list: list 类型，传入的正则表达式列表
        :param string_content: str 类型，需要匹配的文本
        :param tolist: 默认不返回结果列表，否则返回匹配到的第一个不为空的结果列表
        :param reverse: 默认返回findall的第一个结果，否则返回最后一个结果
        :param flags: 默认匹配模式，否则以特定模式寻找字符串
        :param detail: 默认不将返回类型变为元组 (pattern, 结果)，元组中结果的类型仍会受 tolist 影响
        :return: str:    ''                       （默认）
                list:   ['']                     （取决于参数 tolist）
                tuple:  ('', '') 或 ('', [''])   （取决于参数 tolist 和 detail ）
        """

        if tolist:
            result = ['']
        else:
            result = ''
        if detail:
            result = ('', result)
        if isinstance(pattern_list, str):
            pattern_list = [pattern_list, ]
        for pattern in pattern_list:
            try:
                t = re.findall(pattern, string_content, flags)
            except:
                t = ''
            if t:
                if tolist:
                    result = t
                    if filter:
                        result = list(set(t))
                        result.sort(key=t.index)
                else:
                    result = t[-1] if reverse else t[0]
                if isinstance(result, str):
                    logging.debug("\033[1;36m{}\033[0m".format(pattern + ' ' + ''.join([result, ])))
                if detail:
                    result = (pattern, result)
                break
        return result

    @staticmethod
    def find_file_with_reg(res, pattern=r'href="(\S{20,200}[dxpzr][oldia][csfpr]x?)"', url_head=''):
        """
        从文本中按规则提取文件附件
        res 必须已经将\r\t\n 给替换. ps:在管道中生成的 response.string 即已经替换过的文本
        """
        files = re.findall(pattern, res)
        result = '' if not files else url_head + files[0]
        print('file=', result)
        return result
